An embedded system, in general, refers to a combination of hardware and software that is specifically designed for a particular application or purpose. One example of a hardware platform that can be used to implement an embedded system is a programmable IC. Some programmable ICs include a processor capable of executing program code and provide a particularly robust platform upon which an embedded system can be built.
Prior to use within any specific application, a programmable IC must undergo a configuration process, where programmable resources of the programmable IC are configured with a configuration data stream, such as a bitstream, that specifies a configuration of the hardware resources that implement a particular circuit design. Programmable ICs that include a processor, such as system-on-chip (SOC) devices, must also undergo a boot process to load a set of processor instructions into an integrated memory disposed on the programmable IC. For instance, the boot process may load a set of processor instructions of an operating system into the memory at startup. For ease of reference, configuration and boot processes may be referred to as initialization processes herein. Also, initialization data may be used to generally refer to either processor instructions for initialization of a processor and/or a configuration data stream for initialization of programmable resources of a programmable IC.
During the initialization processes, initialization circuits cause the programmable IC to locate and retrieve a boot image including initialization data from a designated peripheral boot device having initialization data stored in a non-volatile memory. The initialization circuits may include, for example, a boot loader circuit and/or configuration control circuit. The initialization circuitry uses the initialization data to configure the programmable IC. For example, the initialization circuits may copy a set of processor instructions in the retrieved boot image to an internal volatile memory (RAM) for execution by the processor. However, the boot image stored in the boot device may be corrupt or may be otherwise unretrievable, thereby preventing the programmable IC from initializing at startup.
One previous approach mitigates the problems presented by corrupt boot images by storing master and backup boot images on the designated boot device. In response to the master boot image being corrupt, the initialization circuit uses the backup boot image on the designated boot device to initialize the programmable IC. In this manner, adverse effects of a corrupt master boot image are mitigated. This initialization process can be implemented with little additional circuitry and space on the programmable IC because the initialization circuit is already configured to retrieve data files from the designated boot device. Due to the limited space available on programmable ICs, this approach is particularly advantageous.